import os
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer

from oss存储对象等调用 import oss文件上传


dashscope.api_key = os.getenv('API_KEY')  # 如果您没有配置环境变量，请在此处用您的API-KEY进行替换
prefix = 'testvoice'  # 音色自定义前缀，仅允许数字和小写字母，小于十个字符。
target_model = "cosyvoice-v2" # 声音复刻所使用的模型，建议使用cosyvoice-v3或cosyvoice-v3-plus（需申请）。


def create_voice(target_model: str, prefix: str, url: str) -> str:
    '''
    创建音色
    param: target_model 声音复刻所使用的模型，请使用cosyvoice-v2。
    param: prefix 音色自定义前缀，仅允许数字和小写字母，小于十个字符。
    param: url 用于复刻音色的音频文件URL。该URL要求公网可访问。
    return: voice_id
    '''
    # 创建语音注册服务实例
    service = VoiceEnrollmentService()

    # 调用create_voice方法复刻声音，并生成voice_id
    # 避免频繁调用 create_voice 方法。每次调用都会创建新音色，每个阿里云主账号最多可复刻 1000 个音色，超额时请删除不用的音色或申请扩容。
    voice_id = service.create_voice(target_model=target_model, prefix=prefix, url=url)
    print("requestId: ", service.get_last_request_id())
    print(f"your voice id is {voice_id}")



    return voice_id

def check_voice(voice_id):
    #输入参数：voice_id
    #返回参数：查询到的音色信息
    # 创建语音注册服务实例
    service = VoiceEnrollmentService()

    voice = service.query_voice(voice_id=voice_id)
    print("request id为：", service.get_last_request_id())
    print(f"查询到的音色为：{voice}")

if __name__ == '__main__':
    url=oss文件上传.upload_local_file_to_oss('test.mp3',oss_file_key_prefix='voice-replica/')
    voice_id=create_voice(target_model=target_model,prefix=prefix,url=url)
    check_voice(voice_id)#用于查询音色是否可用




